如果您打算在C#中编写一个非常并行的应用程序,那么构建非常小的东西会更好
20个小班,40个更大的班级,共计60个,总共120个
或巨大的:
单独制作这60个课程(仍然考虑到可重用性).
所以在#2中,这60个类可以包含处理事物而不是其他类的方法.
我想计算Cuda中整个图像的平均值.为了测试2D数组的减少效果,我在下面编写了这个内核.最终输出o应该是所有图像值的总和.输入g是2D阵列,每个像素的值为1.但是这个程序的结果是总和为0.对我来说有点奇怪.
我在本教程中模仿1D阵列的减少http://developer.download.nvidia.com/compute/cuda/1.1-Beta/x86_website/projects/reduction/doc/reduction.pdf我写这个2D表格.我是Cuda的新手.欢迎提出有关潜在错误和改进的建议!
只需添加一条评论.我知道计算一维数组的平均值是有意义的.但我想利用更多并测试更复杂的还原行为.这可能不对.但只是一个考验.希望任何人都能给我更多关于减少常见做法的建议.
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
cudaEvent_t start, stop;
float elapsedTime;
__global__ void
reduce(float *g, float *o, const int dimx, const int dimy)
{
extern __shared__ float sdata[];
unsigned int tid_x = threadIdx.x;
unsigned int tid_y = threadIdx.y;
unsigned int i = blockDim.x * blockIdx.x + threadIdx.x;
unsigned int j = blockDim.y * blockIdx.y + threadIdx.y;
if (i >= dimx || j >= dimy)
return;
sdata[tid_x*blockDim.y + tid_y] = g[i*dimy + j];
__syncthreads(); …Run Code Online (Sandbox Code Playgroud) 好吧,我的linq技能不是很好,所以我试着做以下事情.
说我有6000条记录(电子邮件地址)我想添加前1000个添加到密件抄送,发送,下一个1000添加到密送,发送,取1000添加到密送,发送等....
我开始打字,
string[] files = System.IO.Directory.GetFiles(@"C:\Mail\ ", "*.csv");
Parallel.ForEach(files, currentFile =>
{
string filename = currentFile;
StreamReader reader = new StreamReader(filename);
var emailList = new List<String>();
while (reader.Peek() >= 0)
{
emailList.Add(reader.ReadLine());
}
\\Here is where I need to do the linq?
IEnumerable<string> list = emailList
var message = new System.Net.Mail.MailMessage();
foreach (var s in list)
{
MailAddress mailAddress = new MailAddress(s);
message.Bcc.Add(mailAddress);
}
message.Subject = txtSubject.Text;
message.From = new System.Net.Mail.MailAddress(txtFrom.Text);
message.Body = txtMessage.Text;
message.IsBodyHtml = true;
var smtp …Run Code Online (Sandbox Code Playgroud) 我正在尝试并行进行 http 查询,然后等待所有查询完成:
g1, _ := go http.Get('http://example.com/1')
g2, _ := go http.Get('http://example.com/2')
res1 := g1.wait() or { panic(err) }
res2 := g2.wait() or { panic(err) }
data1 := json.decode(ApiResult, res1.text) or { panic(err) }
data2 := json.decode(ApiResult, res2.text) or { panic(err) }
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
src/main.go:159:11: syntax error: unexpected go, expecting expression
Run Code Online (Sandbox Code Playgroud) Parallel.For中有这个错误吗?
public class DataPoint
{
public int Game { get; set; }
public byte Card { get; set; }
public byte Location { get; set; }
public DataPoint(int g,byte c,byte Loc)
{
Game = g;
Card = c;
Location = Loc;
}
public override string ToString()
{
return String.Format("{0} {1} {2}",Game,Card,Location);
}
}
Run Code Online (Sandbox Code Playgroud)
它必须是Parallel.For中的错误
private static System.Collections.Concurrent.ConcurrentBag<DataPoint> FillData()
{
var points = new System.Collections.Concurrent.ConcurrentBag<DataPoint>();
long c = 32768;
long z = 0;
Parallel.For(z, c, (i) =>
{
points.Add(new DataPoint( rand.Next(1, …Run Code Online (Sandbox Code Playgroud) 好的,所以我有一个工作正常的程序.在其中有一个可以并行化的for循环.所以我曾经Parallel.For这样做过.它运行了一两次,但其他时候有以下异常:
未指定的错误发生了一个或多个错误
没有进一步的信息,只有这个有用的信息 任何人都知道可能会发生什么?
编辑:好的,所以我把它钉在一个超出范围的例外.事实证明我在初始化之前访问了数组元素,这似乎是竞争条件.我有这个:
Parallel.For(0, 4, (i, state) =>
{
levelTwoPermutationObjects.Add(new permutationObject());
levelTwoPermutationObjects[i].element = number;
levelTwoPermutationObjects[i].DoThings();
});
Run Code Online (Sandbox Code Playgroud)
这使第二和第三行访问一个显然尚不存在的元素.我将元素初始化程序移出并行循环(以便在访问之前初始化数组),现在它可以正常工作.
迭代几乎是彼此独立的,除了Add()部分,显然依赖于它之前是否有另一个元素.
我有一个data.table对象resultList,其中包含名为的列"V1:V128"和一些行。我想获取那些满足条件的列的名称,例如
lapply(.SD, mean) < a
Run Code Online (Sandbox Code Playgroud)
我尝试这样做:
names(resultList[, lapply(.SD, mean) < 0])
Run Code Online (Sandbox Code Playgroud)
但我没有任何效果。什么代码实现这个?
第二个问题 - 是否可以使用parLapply代替lapplyfor data.table(例如,使用parLapply(cl, .SD, mean)代替lapply(.SD, mean))?
并行运行时 a==b 为何为 false 但与组合器一起使用时却有效?
public class test {
public static int cal(final int i) {
return 1;
}
public static void main(String args[]) {
int a = IntStream.range(0, 3).reduce(0, (abc, cde) -> abc + cal(cde));
int b = IntStream.range(0, 3).parallel().reduce(0, (abc, cde) -> abc + cal(cde));
System.out.println(a == b); // false
int c = List.of(0, 1, 2).stream().parallel().reduce(0, (abc, cde) -> abc + cal(cde), Integer::sum);
System.out.println(a == c); // true
}
}
Run Code Online (Sandbox Code Playgroud) 我使用时的性能list.parallelStream()比使用时差得多list.stream()。您认为为什么会发生这种情况?顺便说一句,这是Java 17,我的CPU 是桌面级的 i5。
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.chrono.ChronoPeriod;
import java.time.chrono.HijrahChronology;
import java.time.chrono.HijrahDate;
import java.time.chrono.IsoChronology;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class App {
public static void main(String[] args) throws Exception {
int size = 1;
List<Integer> list = null;
long startTimeN;
long endTimeN;
long startTimeP;
long endTimeP;
long normalStreamCheckedSize;
long normalStreamTime;
long parallelStreamCheckedSize;
long parallelStreamTime; …Run Code Online (Sandbox Code Playgroud) 我有一个fun1写入的函数R需要很长时间才能运行.我需要多次运行所述函数.
我已经完成了关于R在显卡上运行程序的一些阅读,并且只提出了一些可以运行非常特定功能的程序包(大多数矩阵操作).
我的问题是:有没有办法fun1在显卡上运行或任何用户编写的功能(并行化速度).比如R可以安装一个CUDA解释器,或者也许是R为cuda 编译函数的方法,这样我所要做的就是写一些Cuda/C来执行我最初编写的函数R?
任何事情都有帮助
什么是多线程程序,它是如何工作的?我读了一些文件,但我很困惑.我知道代码是逐行执行的,但我无法理解程序如何管理它.
一个简单的答案将被赞赏.#例子请(只有动画!)
c# ×5
java ×2
r ×2
.net ×1
concurrency ×1
cuda ×1
data.table ×1
enumerable ×1
go ×1
go-http ×1
java-17 ×1
java-stream ×1
linq ×1
python ×1
reduction ×1
stream ×1