Переквалификация в программиста

Разговоры обо всем
Автор
Повідомлення
rocket
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

та он же динозавр какой-то. Я с ним в 2006 работал, когда в техникуме учился

Странно, что в локал хост работает, а новые папки не поднимаются.

Перезапускал, дописывал в хост - 0
Ar2r
Advanced Member
Аватар користувача

Повідомлення

А как переквалифицироваться в олигарха? Пацаны, я вам потом всем помогу. Дякую за довиру.
Валерий
Member
Аватар користувача
Звідки: Kur

Повідомлення

rocket
Может, Xampp заюзать? ;)
https://www.apachefriends.org/index.html" target="_blank
Ar2r
Если найдешь решение, маякни :laugh:
rocket
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

Валерий
спс. Если опен не заработает, то придется xampp

Open совсем легкий
rocket
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

Дошел в JS в видеокурсах уже до DOM

Уже на BOM в голове мешанина была. Столько свойств и методов, например, у тех же HTMLTableElement. Все и не запомнить/разобрать.

В BOM есть объект document, а в DOM интерфейс document. У обоих методы и свойства :insane:
rocket
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

С реальными тегами интереснее работать:

Код: Виділити все

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Таблица умножения</title>
<style type="text/css">
td{padding:10px;border:1px solid #369;}
</style>
<script type="text/javascript">
var cell = 10;
var row = 10;

function createDOM() {
/* Создайте в элементе div таблицу с помощью методов DOM */
var div = document.getElementById('d');
if (!document.getElementById('d').hasChildNodes()){
var t=document.createElement('table');
div.appendChild(t);
for (var i=1; i<=row; i++){
var tr=document.createElement('tr');
t.appendChild(tr);
for (var j=1; j<=cell; j++){
var txt = document.createTextNode(j+'x'+i+'='+i*j);
var td=document.createElement('td');
td.appendChild(txt);
tr.appendChild(td);
}
}
}else div.removeChild(div.firstChild);
}
</script>
</head>
<body>
<a href="javascript:createDOM();">Создать таблицу с помощью методов DOM</a><br>
<div id="d"></div>
</body>
</html>
А BOM часто используется? Я в нем не очень разобрался. По тегам прыжки в DOM понятнее

DOM, как я понял, и Java юзает.
Sodik
Junior
Аватар користувача
Звідки: Харьков

Повідомлення

А BOM часто используется?
В основном для определения браузера (userAgent) и для работы с url (location).
DOM, как я понял, и Java юзает.
Все что работает с html страницей юзает DOM.
rocket
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

спасибо

читал книгу и запнулся на 1 моменте.

Получается, что прототип - это объект P, который существует вместе с объектом A, который наследует его свойства.

При этом объект A наследует свойства и методы своего предка, а его прототип P наследует методы и свойства прототипа предка?
hgtrwds
Member

Повідомлення

просветите плиз недоумка, как работает компилятор масм с синтаксисом интел
скомпилируйте инструкцию

Код: Виділити все

.data
var db  0
......................................
.code
mov eax,2
movzx eax,var[eax]
.......................................
какой опкод поставит b6 или b7?
может быть по логике и тот и тот, как он выбирает?
всё, понел, если var db, то байт, если dw, то 16 бит :up:
rocket
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

Дошел в новой книге по js до замыканий. Запутался.

function f1(){
var b= 'bbbbb'
function f2(){
return b;
}
return f2;
}

var start = f1()
var end = start();

в нудной книге говорили, что переменная b будет доступна функции f2, потому что объект функции f2 не удаляется чистильщиком стека, пока на него или его свойство есть хоть 1 ссылка.


А в книге с котиками говорят, что объект внешней функции убивает и удаляется. А переменная b доступна внутренней функции потому, что при присваивании ее переменнной start к ссылке функции f2 прилепляется еще среда выполнения, в которой хранятся все переменный из ее области видимости.

Что правильнее? Мне кажется, что первый вариант логичнее
freedom2686
HWBOT OC Team
Аватар користувача
Звідки: Бар

Повідомлення

Я бы начал с xCode - это очень прибыльно!
rocket
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

freedom2686
это вообще не язык программирования, а среда разработки
Зображення
freedom2686
HWBOT OC Team
Аватар користувача
Звідки: Бар

Повідомлення

rocket:freedom2686
это вообще не язык программирования, а среда разработки
Зображення
А кто вам сказал что это язык программирования?
Да, xCode - objective c с некоторыми своими нюансяами.
У меня товарищь нормально на этом зарабатывает, правда башляет 99у.е. в год, но ему норм. Зарабатывает больше.
rocket
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

Objective-C - это язык программирования.
freedom2686
HWBOT OC Team
Аватар користувача
Звідки: Бар

Повідомлення

rocket:Objective-C - это язык программирования.
Я в курсе. Спасибо. B-)
rocket
Member
Аватар користувача
Звідки: Запорожье

Повідомлення

freedom2686:А кто вам сказал что это язык программирования?
Да, xCode - objective c с некоторыми своими нюансяами.
этот текст противоречит сам себе
comandarm
Member

Повідомлення

необходимо отладить простыню

Код: Виділити все

#include <CL/cl.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "Timer.h"
#define NDEVS 2
const char* kernel_source=
"#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics:enable\n"
"#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics:enable\n"
"#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
"__kernel void minp(__global uint4 *src,\n"
"__global uint *gmin,\n"
"__local uint *lmin,\n"
"__global uint *dbg,\n"
"int nitems,\n"
"uint dev)\n"
"{\n"
"printf(\"ok\\n\");\n"
"uint count=(nitems/4)/get_global_size(0);\n"
"uint idx=(dev==0)?get_global_id(0)*count:get_global_id(0);\n"
"uint stride=(dev==0)?1:get_global_size(0);\n"
"uint pmin=(uint)-1;\n"
"for(int n=0;n<count;n++,idx+=stride)\n"
"{\n"
"pmin=min(pmin,src[idx].x);\n"
"pmin=min(pmin,src[idx].y);\n"
"pmin=min(pmin,src[idx].z);\n"
"pmin=min(pmin,src[idx].w);\n"
"}\n"

"if(get_local_id(0)==0)\n"
"lmin[0]=(uint)-1;\n"
"barrier(CLK_LOCAL_MEM_FENCE);\n"
"(void) atom_min(lmin,pmin);\n"
"barrier(CLK_LOCAL_MEM_FENCE);\n"
"if(get_local_id(0)==0)\n"
"gmin[get_group_id(0)]=lmin[0];\n"
"if(get_global_id(0)==0)\n"
"{\n"
"dbg[0]=get_num_groups(0);\n"
"dbg[1]=get_global_size(0);\n"
"dbg[2]=count;\n"
"dbg[3]=stride;\n"
"}\n"
"}\n"
"__kernel void reduce(__global uint4 *src,\n"
"__global uint *gmin)\n"
"{\n"
"(void) atom_min(gmin,gmin[get_global_id(0)]);\n"
"}\n";
int main(int argc,char ** argv)
{
	cl_platform_id platform;
	int dev,nw;
	cl_device_type devs[NDEVS]={CL_DEVICE_TYPE_CPU,CL_DEVICE_TYPE_GPU};
	cl_uint *src_ptr;
	unsigned int num_src_items = 4096*4096;
	time_t ltime;
	time(&ltime);
	src_ptr = (cl_uint *)malloc(num_src_items*sizeof(cl_uint));
	cl_uint a = (cl_uint) ltime,
		b = (cl_uint) ltime;
	cl_uint min = (cl_uint) - 1;
	for(int i=0;i<num_src_items;i++)
	{
		src_ptr[i]=(cl_uint)(b=(a*(b&65535))+(b>>16));
		min=src_ptr[i]<min?src_ptr[i]:min;
	}
	clGetPlatformIDs(1,&platform,NULL);

	for(dev=0;dev<NDEVS;dev++)
	{
		cl_device_id device;
		cl_context context;
		cl_command_queue queue;
		cl_program program;
		cl_kernel minp;
		cl_kernel reduce;
		cl_mem src_buf;
		cl_mem dst_buf;
		cl_mem dbg_buf;
		cl_uint *dst_ptr,*dbg_ptr;

		printf("\n%s",dev==0 ? "CPU\n\0":"GPU\n\0");

		clGetDeviceIDs(platform,devs[dev],1,&device,NULL);
		
		cl_uint compute_units;
		size_t global_work_size;
		size_t local_work_size;
		size_t num_groups;
		clGetDeviceInfo(device,CL_DEVICE_MAX_COMPUTE_UNITS,sizeof(cl_uint),&compute_units,NULL);
		printf("%d\n",compute_units);
		if(devs[dev]==CL_DEVICE_TYPE_CPU)
		{
			global_work_size=compute_units*1;
			local_work_size=1;
		}
		else
		{
			cl_uint ws=64;
			global_work_size=compute_units*ws*7;
			while((num_src_items/4)%global_work_size!=0) global_work_size+=ws;
			local_work_size=ws;
		};

		num_groups=global_work_size/local_work_size;
		context=clCreateContext(NULL,1,&device,NULL,NULL,NULL);
		queue=clCreateCommandQueue(context,device,0,NULL);

		if(queue==NULL)
		{
			printf("Compute device setup failed\n");
			return(-1);
		}
		program=clCreateProgramWithSource(context,1,&kernel_source,NULL,NULL);
		cl_uint ret=clBuildProgram(program,1,&device,"-save-temps",NULL,NULL);
		if(ret!=CL_SUCCESS)
		{
			printf("clBuildProgram failed: %d\n",ret);
			char buf[0x10000];
			clGetProgramBuildInfo(program,device,CL_PROGRAM_BUILD_LOG,0x10000,buf,NULL);
			printf("\n%s\n",buf);
			return(-1);
		}
		minp=clCreateKernel(program,"minp",NULL);
		reduce=clCreateKernel(program,"reduce",NULL);
		src_buf=clCreateBuffer(context,CL_MEM_READ_ONLY|CL_MEM_COPY_HOST_PTR,num_src_items*sizeof(cl_uint),src_ptr,NULL);
		dst_buf=clCreateBuffer(context,CL_MEM_READ_WRITE,num_groups*sizeof(cl_uint),NULL,NULL);
		dbg_buf=clCreateBuffer(context,CL_MEM_WRITE_ONLY,global_work_size*sizeof(cl_uint),NULL,NULL);

		clSetKernelArg(minp,0,sizeof(void*),(void*)src_buf);
		clSetKernelArg(minp,1,sizeof(void*),(void*)dst_buf);
		clSetKernelArg(minp,2,1*sizeof(cl_uint),(void*)NULL);		
		clSetKernelArg(minp,3,sizeof(void*),(void*)dbg_buf);
		clSetKernelArg(minp,4,sizeof(num_src_items),(void*)&num_src_items);
		clSetKernelArg(minp,5,sizeof(dev),(void*)&dev);
		clSetKernelArg(reduce,0,sizeof(void*),(void*)&src_buf);		
		clSetKernelArg(reduce,1,sizeof(void*),(void*)&dst_buf);		
		CPerfCounter t;
		t.Reset();
		t.Start();
#define NLOOPS 500
		cl_event ev;
		int nloops=NLOOPS;

		while(nloops--)
		{

			clEnqueueNDRangeKernel(queue,minp,1,NULL,&global_work_size,&local_work_size,0,NULL,&ev);
			clEnqueueNDRangeKernel(queue,reduce,1,NULL,&num_groups,NULL,1,&ev,NULL);
		};
		
		clFinish(queue);
		t.Stop();
		printf("B/W %.2f GB/sec, ",((float)num_src_items*sizeof(cl_uint)*NLOOPS)/t.GetElapsedTime()/1e9);
		dst_ptr=(cl_uint*)clEnqueueMapBuffer(queue,dst_buf,CL_TRUE,CL_MAP_READ,0,num_groups*sizeof(cl_uint),0,NULL,NULL,NULL);
		dbg_ptr=(cl_uint*)clEnqueueMapBuffer(queue,dbg_buf,CL_TRUE,CL_MAP_READ,0,global_work_size*sizeof(cl_uint),0,NULL,NULL,NULL);
		printf("%d groups,%d threads,count %d,stride %d\n",dbg_ptr[0],dbg_ptr[1],dbg_ptr[2],dbg_ptr[3]);
		if(dst_ptr[0]==min)
			printf("result correct\n");
		else
			printf("result incorrect\n");			
	}
	printf("\n");
	return 0;
}
где-то ошибка, падает в segmentation fault после enqueuendrangekernel, как такое отлаживать?
если в случае с цпу помогает обычный printf, то тут..
год назад оно у меня работало, может другая ревизия amd app sdk programming guide была, может еще что-то — не знаю, но сейчас в полном тупике...
есть здесь собратья по разуму, gpu программисты? :beer:
comandarm
Member

Повідомлення

всем благодарности, отладил сам
прикольная прога, на алгоритме поиска минимума в массиве gpu обходит по скорости cpu примерно в 50 раз
gpu:radeon hd 7870 2g
cpu:sempron 145 2.8ghz
буду дальше читать мануалы :super:
Smok
Member
Аватар користувача
Звідки: Дніпро

Повідомлення

как успехи у топикастера?
EtherealDeath
Member
Звідки: Харьков

Повідомлення

Smok:как успехи у топикастера?
Відповісти