- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
卸载调用将函数的数据(参数)从主机传输到 Intel MIC(Xeon Phi 协处理器 3120 系列)是否需要预定义的时间?
具体来说,我为要在 MIC 上执行的函数执行卸载调用(“#pragma offload target(mic)”)。该函数有 15 个参数(指针和变量),我已经在 MIC 上确认了参数的正确传递。然而,我简化了代码,目的是检查参数传递的时间,因此它只包含一个简单的“printf()”函数。我使用“sys/time.h”头文件的“gettimeofday()”来测量时间,如下面的代码所示:
主机的一些硬件信息:Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz/CentOS release 6.8/PCI Express Revision 2.0
main.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <string.h>
__attribute__ (( target (mic))) unsigned long long ForSolution = 0;
__attribute__ (( target (mic))) unsigned long long sufficientSol = 1;
__attribute__ (( target (mic))) float timer = 0.0;
__attribute__ (( target (mic))) void function(float *grid, float *displ, unsigned long long *li, unsigned long long *repet, float *solution, unsigned long long dim, unsigned long long numOfa, unsigned long long numLoops, unsigned long long numBlock, unsigned long long thread, unsigned long long blockGrid, unsigned long long station, unsigned long long bytesSol, unsigned long long totalSol, volatile unsigned long long *prog);
float *grid, *displ, *solution;
unsigned long long *li,repet;
volatile unsigned long long *prog;
unsigned long long dim = 10, grid_a = 3, numLoops = 2, numBlock = 0;
unsigned long long thread = 220, blockGrid = 0, station = 12;
unsigned long long station_at = 8, bytesSol, totalSol;
bytesSol = dim*sizeof(float);
totalSol = ((1024 * 1024 * 1024) / bytesSol) * bytesSol;
/******** Some memcpy() functions here for the pointers*********/
gettimeofday(&start, NULL);
#pragma offload target(mic) \
in(grid:length(dim * grid_a * sizeof(float))) \
in(displ:length(station * station_at * sizeof(float))) \
in(li:length(dim * sizeof(unsigned long long))) \
in(repet:length(dim * sizeof(unsigned long long))) \
out(solution:length(totalSol/sizeof(float))) \
in(dim,grid_a,numLoops,numBlock,thread,blockGrid,station,bytesSol,totalSol) \
in(prog:length(sizeof(volatile unsigned long long))) \
inout(ForSolution,sufficientSol,timer)
{
function(grid, displ, li, repet, solution, dim, grid_a, numLoops, numBlock, thread, blockGrid, station, bytesSol, totalSol, prog);
}
gettimeofday(&end, NULL);
printf("Time to tranfer data on Intel Xeon Phi: %f sec\n", (((end.tv_sec - start.tv_sec) * 1000000.0 + (end.tv_usec - start.tv_usec)) / 1000000.0) - timer);
printf("Time for calculations: %f sec\n", timer);
函数.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/time.h>
#include <string.h>
#include <omp.h>
void function(float *grid, float *displ, unsigned long long *li, unsigned long long *repet, float *solution, unsigned long long dim, unsigned long long numOfa, unsigned long long numLoops, unsigned long long numBlock, unsigned long long thread, unsigned long long blockGrid, unsigned long long station, unsigned long long bytesSol, unsigned long long totalSol, volatile unsigned long long *prog)
{
struct timeval timer_start, timer_end;
gettimeofday(&timer_start, NULL);
printf("Hello World!!!\n");
gettimeofday(&timer_end, NULL);
timer = ((timer_end.tv_sec - timer_start.tv_sec) * 1000000.0 + (timer_end.tv_usec - timer_start.tv_usec)) / 1000000.0 ;
}
终端结果:
Time to tranfer data on Intel Xeon Phi: 3.512706 sec
Time for calculations: 0.000002 sec
Hello World!!!
代码需要 3.5 秒才能完成“卸载目标”。以上结果正常吗?有什么办法可以减少卸载调用的显着时间延迟吗?
最佳答案
让我们看看这里的步骤:
a) 对于第一个 #pragma offload
,MIC 被初始化;这可能包括重置它、启动精简的 Linux(并等待它启动所有 CPU、初始化其内存管理、启动伪 NIC 驱动程序等),以及将代码上传到设备。这可能需要几秒钟的时间。
b) 所有输入数据都上传到MIC。
c) 函数被执行。
d) 所有输出数据均从MIC下载。
对于通过 PCI Express Revision 2.0 (x16) 进行的原始数据传输,最大值。带宽为 8 GB/s;但是你不会得到最大值。带宽。据我所知,与 Phi 的通信涉及共享环形缓冲区和“门铃”IRQ,两侧(在主机和协处理器的操作系统上)都有“伪 NIC”驱动程序;加上所有的握手和开销,如果你能得到最大的一半,我会感到惊讶。带宽。
我认为上传的代码、上传的数据和下载的数据的总量远远超过 1 GiB(例如 out(solution:length(totalSol/sizeof(float)))
是 1 GiB完全靠自己)。如果我们假设“大约 4 GiB/s”,那至少还有 ~250 毫秒。
我的建议是每件事都做两次;并测量第一次(包括初始化所有内容)和第二次(当所有内容都已初始化时)之间的差异,以确定初始化协处理器需要多长时间。第二次测量(减去执行函数的时间)将告诉您数据传输花费了多长时间。
关于c - 将功能卸载到英特尔至强融核所需的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47542127/
1.使用start-all.sh启动hadoop服务时,提示输入 您确定要继续连接吗(是/否) 当我通过脚本启动它时如何抑制这个提示,现在我正在使用期望模块,但我认为可能有一种更简单的方法来做到这一点
我安装了在 Ubuntu 12.04 下运行的 Geonode R 2.01。我尝试使用以下命令卸载它: sudo apt-get remove --purge geonode sudo apt-ge
假设我有 AppDomainA,它启动 AppDomainB。 AppDomainB 然后启动 AppDomainC。 如果在 AppDomainA 中卸载 AppDomainB,AppDomainC
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我尝试使用以下命令从我的 Ubuntu 中卸载 NGinX: sudo apt-get remove nginx-core nginx-full nginx-light nginx-extras n
我已经从 /Applications/ 中删除了 MacVim目录,但当我输入 vim 时在终端中显示错误:no such file or directory: /Applications/MacVi
我的页面中有一个 iframe,该 iframe 嵌入了一个不在我的服务器上的网站。 我正在寻找一种在 iframe 重定向之前触发函数的方法。例如,当用户单击 iframe 内的链接并且 ifram
看来我被 Visual Studio 的 Atomineer Pro 文档加载项挟持了!试用期结束了,我没有用了!但现在每次我在 Visual Studio 中做某事时,我都会收到一条错误消息并发送到
我有一个使用 WiX 完成的安装程序。安装完成后,它会启动一个应用程序,在 Explorer 进程中注入(inject)一些代码。 目前,当我卸载时,重新启动管理器会启动并关闭我的应用程序和资源管理器
在我的网络应用中,我需要在用户离开页面之前发送他们更改的最新数据。 我在页面卸载时调用这样的函数: window.onbeforeunload=sendData; 这就是函数内部调用的内容 funct
我使用 jQuery 和 history.js 来管理部分页面之间的动态转换;这样我就可以避免重新加载整个文档。其中一些部分页面调用自己独特的 javascript 文件。虽然页面之间的转换运行良好,
我需要处理应用程序包的变化,我这样写我的 mainfest mainfest.xml 我的接收器类
我目前在使用大量内存方面遇到了麻烦,我正在尽一切努力削减和优化涉及内存的代码...目前我的游戏的大部分 Nib 文件都加载了所有它在 ViewDidLoad 中的变量,现在我的问题是,在我的 view
如何从系统中删除 composer Php Dependecny Manager? 它说卸载无法继续,因为以下应用程序正在使用需要删除的文件。 Windows 资源管理器 最佳答案 我遇到了同样的问题
所以我使用 stow 在服务器上安装了 Python 2.7.1 源代码 .我过去很粗心,在处理源代码安装时我试图保持井井有条。所以,输入 stow。现在我使用 wget 安装了 easy_insta
有谁知道如何卸载 MacRuby?我在使用 RubyCocoa 然后决定试用 MacRuby,在安装 MacRuby 之后,RubyCocoa 已经停止工作。所以我想删除 MacRuby,但我找不到任
我无法从 64 位 EC2 卸载 mongo。在/usr/bin 我有 mongo 和 mongod 等等。当我从任何地方键入 mongo 时,它会在 1.8 版打开 shell。我现在下载了 2.0
本文实例讲述了Android编程实现监控apk安装,卸载,替换的方法。分享给大家供大家参考,具体如下: ?
1说明 mysql++是mysql开发团队为OO编程提供的C++开发库,是对mysql提供的底层数据存取API进行的C++封装,用其手册上的说法是:复杂而又庞大,当然功能也更强大。 Mysql+
自从我开始建立我的网站那天起,我安装了很多包,有时是为了测试一堆代码,有时是为了项目本身(后来我发现这不是需要的包)。但是现在,当我运行 pip freeze 时,我有一个包列表,我很难卸载不使用的包
我是一名优秀的程序员,十分优秀!