среда, 26 мая 2010 г.

CUDAxтаем дальше: линал и графы

Обнаружил мат.библиотеку на CUDA для решения СЛАУ с разреженными матрицами. Еще она умеет что-то с графами делать. Пока фукнциональность небогатая (например, предобуславливатель только один - обратная диагональ), но разработчики обещают добавлять.


Называется библиотека CUSP, лежит здесь.

Visual Studio: подавление warning-ов

Прога выдает штук сто варнингов об unreferenced variable. Надоело.

Есть два пути отключения варнингов.

1. В настройках проекта. Configuration Properties -> C\C++ -> Disable Specific Warnings.
Перечисляем номера варнингов (только не С4101 надо писать, а 4101) через точку с запятой.
Отключает эти варнинги во всей проге.

2. Пусть надо отключить варнинги в некотором участке кода. Пишем:
#pragma warning(disable: 4101, 4996)
<кусок кода>
#pragma warning(default: 4101, 4996)
Вторая прагма восстанавливает выдачу варнингов.

понедельник, 24 мая 2010 г.

batch: переименование файлов по маске.

Некоторые особенности программирования batch-файлов способны запутать даже мастеров скриптования.

Например. У нас есть директория с файлами вида a-001.zdt, a-002.zdt и т.д. Мы хотим их переименовать в a-wp001.zdt, a-wp002.zdt, ...

Это можно сделать следующим bat-ником:

for %%I in ("*.zdt") do (
for /f "delims=-. tokens=1,2,3" %%A in ('echo %%I') do (
ren %%I %%A-wp%%B.%%C )
)

Разберемся. Во внешнем цикле в переменную %%I по очереди помещаются имена файлов с расширением zdt. Внутренний цикл парсит имена - разбивает на куски. Ключ /f включает некоторые спецвозможности (см. help for). "delims=-." означает, что символы "-", "."мы считаем разделителями. "tokens=1,2,3" означает, что делим имя файла на 3 части по разделителям.

Переменная %%A - это итератор внутреннего цикла, как %%I - итератор внешнего. Но здесь %%A бежит не по списку файлов, а по строке, которую выводит команда echo %%I (которая выводит содержимое %%I, т.е. имя очередного файла). Одинарные кавычки и говорят циклу - итерируем по результату выполнения команды. Вообще, важно ставить нужные кавычки. Если поставить вокруг echo двойные кавычки - будет ошибка. В двойных надо писать списко файлов.

Теперь - внимание. Имя файла разбивается на три части. Первая помещается в итератор %%A. Вторая и третья - в ЛЮБЫЕ переменные, которые встрется внутри цикла. Здесь это %%B и %%С, но вовсе не обязательно брать подряд идущие буквы (A,B,С). Можно другие. Лихо, да? Batch, оказывается, хитроумнее Perl-a.

Да, вот еще. Переменные-итераторы могут иметь только однобуквенные названия.

воскресенье, 23 мая 2010 г.

ПоCUDAхтаем

В лекциях Саада обнаружил ссылку на статьи по CUDA некоего Роба Фарбера. Всего Фарбер написал аж 15 статей, лежат они на весьма уважаемом ресурсе DrDobbs.

Итак, Rob Farber "CUDA, Supercomputing for the Masses".

пятница, 21 мая 2010 г.

BLAS и Lapack под Windows

Вообще-то, принято собирать их самостоятельно, но если есть возможность - почему бы не воспользоваться:
dll, lib и хедэры можно скачать со страницы чеха Свободы.

Теперь есть надежда, что всякие математические пакеты, заточенные под Юникс, свободно соберутся и под Виндой.

UPD.

Линковать лучше статически (blas_win32_mt.dll и lapack_win32_mt.dll). Если брать *_md.dll - возникает ошибка error loading C runtime library. Также Visual Studio потребовала msvcr90.dll (это, собственно, и есть С runtime library). Скачал с сайта www.dll-files.com.

четверг, 20 мая 2010 г.

Гражданин Саад и другие

Юзеф Саад - культовая личность среди тех, кто решает СЛАУ. Фанаты могут увидеть его фото на его страничке (где много всего полезного). Добрый Юзеф выложил в электронном виде конспекты своих лекций (см. раздел Teaching):
> Computational Aspects of Matrix Theory
> Sparse Matrix Computations
> Introduction to Parallel Computing
Последний курс (про паралл выч) прочтен этой весной, на странице есть не только pdf с лекциями (есть лекция по CUDA!), но и куча программок-примеров на OpenMP, CUDA, MPI.

Софт Саада.

Хоумпейджи других авторитетных товарищей:
Dominique Pelletier (Монреаль)
Randall Bramley (автор splib, Indiana)
Martin J. Gander (variable preconditioning, etc.)
Volker Mehrmann (Берлин)
Nicholas J. Higham
(Manchester) - почти классик. Делал код для Lapack, NAG, Matlab. Занимается вычислительной линейной алгеброй и теорией устойчивости алгоритмов. Работы по тестовым матрицам.
Михаил Юрьевич Баландин (Новосибирск),
один из авторов методички "Методы решения СЛАУ большой размерности"

вторник, 18 мая 2010 г.

Нет балунам!

Очень, знаете ли, раздражают подсказки в виде облачков из комиксов (balloon tips). Они постоянно вылезают в правом нижнем углу, где всякие значки: "New version of Java machine is available" и прочее.

Чтоб это отключить, надо в разделе реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced создать параметр типа DWORD под названием EnableBalloonTips и присвоить ему значение ноль. Потом закрыть редактор реестра, выйти из системы и снова войти.

четверг, 13 мая 2010 г.

Математика в интернете

Вот, уже придумали, как делать онлайн-книжки по математике с ИСПОЛНЯЕМЫМИ алгоритмами. Т.е. можно встраивать программы в книжки, я так понимаю.
Читать здесь: О проекте artspb.com

Там же написано о каком-то Internet Matlab (iMatlab).

вторник, 11 мая 2010 г.

Адрес приватной переменной

Напишем что0-нибудь типа

int lm;

#pragma omp parallel for private(lm)
for(i = 0; i < maxI; i++)
{
MyRead(&lm);
}

здесь функция MyRead читает в lm. Прототип MyRead(int *arg).

Так вот, возникает подозрение, что эта конструкция работать будет некорректно, т.к. адрес приватной переменной определяется неверно.


Т.е. лучше

int lm[N_];

#pragma omp parallel for
for(i = 0; i < maxI; i++)
{
s_ = omp_get_thread_num();
MyRead(lm+s_);
}

где N_ - число процессов